package tur.br.moradadosol.view.form;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import tur.br.moradadosol.model.Apartamento;
import tur.br.moradadosol.model.Hospedagem;
import tur.br.moradadosol.model.Hospede;
import tur.br.moradadosol.util.Util;

public class HospedagemForm extends ActionForm {
	
	private String gravar;
	private String cancelar;
	private String deletar;
	private String procurar;
	private String pesquisar;
	private String voltar;
	private String procurarReserva;
	private String calcularPreco;
	private Hospedagem hospedagem;
	private ArrayList hospedagens;
	private String limpar;
	private Collection apartamentos;
	
	public HospedagemForm() {
		reset();
	}
	
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		setGravar("");
		setCancelar("");
		setDeletar("");
		setProcurar("");
		setPesquisar("");
		setVoltar("");
		setProcurarReserva("");
		setCalcularPreco("");
		setLimpar("");
	}
	
	public void reset() {
		hospedagem = new Hospedagem();
		Hospede hospede = new Hospede();
		
		hospedagem.setHospede(hospede);
	}

	public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
		
		ActionErrors errors = new ActionErrors();
		
		if(getGravar().length() > 0 || 
				getCalcularPreco().length() > 0) {
			if(hospedagem.getHospede().getCodigo() == 0) {
				errors.add("reserva.error", 
					new ActionMessage("error.hospedagem.hospede.required"));
			}
			if(hospedagem.getApartamento() == null
					|| hospedagem.getApartamento().getCodigo() == 0) {
				errors.add("reserva.error", 
					new ActionMessage("error.hospedagem.apartamento.required"));
			}
			if(hospedagem.getQuantidade() == 0) {
				errors.add("reserva.error", 
						new ActionMessage("error.hospedagem.quantidade.required"));
			}
			if(hospedagem.getEntrada() == null) {
				errors.add("reserva.error", 
					new ActionMessage("error.hospedagem.datainicio.required"));
			}
			if(hospedagem.getSaida() == null) {
				errors.add("reserva.error", 
					new ActionMessage("error.hospedagem.datafim.required"));
			}
			if(hospedagem.getEntrada() != null &&
				hospedagem.getSaida() != null &&
				hospedagem.getEntrada().after(hospedagem.getSaida())) {
				errors.add("reserva.error", 
					new ActionMessage("error.hospedagem.datainicio.invalid"));
			}
			if(hospedagem.getEntrada() != null && Util.compareDates(
					hospedagem.getEntrada(), Calendar.getInstance()) < 0) {
				errors.add("reserva.error", 
					new ActionMessage("error.hospedagem.datainicio.smaller.currentDate"));
			}
			if(hospedagem.getSaida() != null && Util.compareDates(
					hospedagem.getSaida(), Calendar.getInstance()) < 0) {
				errors.add("reserva.error", 
					new ActionMessage("error.hospedagem.datafim.smaller.currentDate"));
			}
		}
		
		return errors;
	}
	
	public int getCodigoHospede() {
		
		int codigo = 0;
		
		if(hospedagem.getHospede() != null)
			codigo = hospedagem.getHospede().getCodigo();
		return codigo;
	}
	
	public void setCodigoHospede(int codigo) {
		if(codigo != 0) {
			hospedagem.getHospede().setCodigo(codigo);
		}
	}
	
	public String getNomeHospede() {
		
		String nome = "";
		
		if(hospedagem.getHospede() != null)
				nome = hospedagem.getHospede().getNome();
		
		return nome;
	}
	
	public void setNomeHospede(String nome) {
		if(!"".equals(nome)) {
			hospedagem.getHospede().setNome(nome);
		}
	}

	public String getGravar() {
		return gravar;
	}

	public void setGravar(String gravar) {
		this.gravar = gravar;
	}

	public String getCancelar() {
		return cancelar;
	}

	public void setCancelar(String cancelar) {
		this.cancelar = cancelar;
	}

	public String getDeletar() {
		return deletar;
	}

	public void setDeletar(String deletar) {
		this.deletar = deletar;
	}

	public String getProcurar() {
		return procurar;
	}

	public void setProcurar(String procurar) {
		this.procurar = procurar;
	}

	public String getPesquisar() {
		return pesquisar;
	}

	public void setPesquisar(String pesquisar) {
		this.pesquisar = pesquisar;
	}

	public String getVoltar() {
		return voltar;
	}

	public void setVoltar(String voltar) {
		this.voltar = voltar;
	}

	public String getProcurarReserva() {
		return procurarReserva;
	}

	public void setProcurarReserva(String procurarReserva) {
		this.procurarReserva = procurarReserva;
	}

	public String getCalcularPreco() {
		return calcularPreco;
	}

	public void setCalcularPreco(String calcularPreco) {
		this.calcularPreco = calcularPreco;
	}

	public Hospedagem getHospedagem() {
		return hospedagem;
	}

	public void setHospedagem(Hospedagem hospedagem) {
		this.hospedagem = hospedagem;
	}

	public ArrayList getHospedagens() {
		return hospedagens;
	}

	public void setHospedagens(ArrayList hospedagens) {
		this.hospedagens = hospedagens;
	}

	public String getLimpar() {
		return limpar;
	}

	public void setLimpar(String limpar) {
		this.limpar = limpar;
	}

	public Collection getApartamentos() {
		return apartamentos;
	}

	public void setApartamentos(Collection apartamentos) {
		this.apartamentos = apartamentos;
	}

	public long getCodigo() {
		return hospedagem.getCodigo();
	}

	public void setCodigo(long codigo) {
		this.hospedagem.setCodigo(codigo);
	}

	public int getApartamento() {
		if(hospedagem.getApartamento() != null) 
			return hospedagem.getApartamento().getCodigo();
		return 0;
	}

	public void setApartamento(int apartamento) {
		if(hospedagem.getApartamento() == null)
			hospedagem.setApartamento(new Apartamento());
		hospedagem.getApartamento().setCodigo(apartamento);
	}

	public Hospede getHospede() {
		return hospedagem.getHospede();
	}

	public void setHospede(Hospede hospede) {
		this.hospedagem.setHospede(hospede);
	}

	public String getEntrada() {
		return Util.getDate(hospedagem.getEntrada());
	}

	public void setEntrada(String entrada) {
		hospedagem.setEntrada(Util.getDate(entrada));
	}

	public String getSaida() {
		return Util.getDate(hospedagem.getSaida());
	}

	public void setSaida(String saida) {
		hospedagem.setSaida(Util.getDate(saida));
	}

	public int getQuantidade() {
		return hospedagem.getQuantidade();
	}

	public void setQuantidade(int quantidade) {
		this.hospedagem.setQuantidade(quantidade);
	}

	public String getPreco() {
		return Util.getValorFormatado(hospedagem.getPreco());
	}

	public void setPreco(String preco) {
		hospedagem.setPreco(Util.getValorFloat(preco));
	}

	public String[] getAcompanhantes() {
		return hospedagem.getAcompanhantes();
	}

	public void setAcompanhantes(String[] acompanhantes) {
		hospedagem.setAcompanhantes(acompanhantes);
	}

	public String getSolicitante() {
		return hospedagem.getSolicitante();
	}

	public void setSolicitante(String solicitante) {
		hospedagem.setSolicitante(solicitante);
	}

	public String getDataSolicitacao() {
		return Util.getDate(hospedagem.getDataSolicitacao());
	}

	public void setDataSolicitacao(String dataSolicitacao) {
		hospedagem.setDataSolicitacao(Util.getDate(dataSolicitacao));
	}

	public String getDataLimite() {
		return Util.getDate(hospedagem.getDataLimite());
	}

	public void setDataLimite(String dataLimite) {
		hospedagem.setDataLimite(Util.getDate(dataLimite));
	}

	public String getSinal() {
		return Util.getValorFormatado(hospedagem.getSinal());
	}

	public void setSinal(String sinal) {
		hospedagem.setSinal(Util.getValorFloat(sinal));
	}

	public String getRestante() {
		return Util.getValorFormatado(hospedagem.getRestante());
	}

	public void setRestante(String restante) {
		hospedagem.setRestante(Util.getValorFloat(restante));
	}

	public boolean getSinalPago() {
		return hospedagem.isSinalPago();
	}

	public void setSinalPago(boolean sinalPago) {
		hospedagem.setSinalPago(sinalPago);
	}

	public boolean getRestantePago() {
		return hospedagem.isRestantePago();
	}

	public void setRestantePago(boolean restantePago) {
		hospedagem.setRestantePago(restantePago);
	}

	public int getStatus() {
		return hospedagem.getStatus();
	}

	public void setStatus(int status) {
		hospedagem.setStatus(status);
	}

	public String getModeloCarro() {
		return hospedagem.getModeloCarro();
	}

	public void setModeloCarro(String modeloCarro) {
		hospedagem.setModeloCarro(modeloCarro);
	}

	public String getPlacaCarro() {
		return hospedagem.getPlacaCarro();
	}

	public void setPlacaCarro(String placaCarro) {
		hospedagem.setPlacaCarro(placaCarro);
	}

	public String getChave() {
		return hospedagem.getChave();
	}

	public void setChave(String chave) {
		hospedagem.setChave(chave);
	}
}
